package cn.sell.comm.lock.model;

/**
 * @author zhumaer
 * @desc 锁类型
 * @since 6/27/2018 11:29 PM
 */
public enum LockType {
    /**
     * 可重入锁：
     * 某个线程已经获得某个锁，可以再次获取锁而不会出现死锁
     */
    Reentrant,

    /**
     * 公平锁:
     * 在公平的锁中，如果有另一个线程持有锁或者有其他线程在等待队列中等待这个所，那么新发出的请求的线程将被放入到队列中。
     * 而非公平锁上，只有当锁被某个线程持有时，新发出请求的线程才会被放入队列中（此时和公平锁是一样的）。
     * 所以，它们的差别在于非公平锁会有更多的机会去抢占锁。
     */
    Fair,

    /**
     * 读锁/共享锁
     */
    Read,

    /**
     * 写锁/排他锁
     */
    Write
}
